package com.wenx.v3system.modular.cloud.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.v3system.modular.cloud.domain.po.SysRolePermission;

import java.util.List;
import java.util.Set;

/**
 * 系统角色权限关联服务接口
 * 管理角色与权限的多对多关系
 *
 * @author wenx
 * @since 1.0.0
 */
public interface SysRolePermissionService extends IService<SysRolePermission> {

    /**
     * 获取角色的权限ID列表
     *
     * @param roleId 角色ID
     * @return 权限ID集合
     */
    Set<Long> getPermissionIdsByRoleId(Long roleId);

    /**
     * 获取角色的权限代码列表
     *
     * @param roleId 角色ID
     * @return 权限代码集合
     */
    Set<String> getPermissionCodesByRoleId(Long roleId);

    /**
     * 为角色分配权限
     *
     * @param roleId 角色ID
     * @param permissionIds 权限ID列表
     */
    void assignPermissionsToRole(Long roleId, List<Long> permissionIds);

    /**
     * 移除角色的权限
     *
     * @param roleId 角色ID
     * @param permissionIds 权限ID列表
     */
    void removePermissionsFromRole(Long roleId, List<Long> permissionIds);

    /**
     * 清空角色的所有权限
     *
     * @param roleId 角色ID
     */
    void clearRolePermissions(Long roleId);

    /**
     * 检查角色是否拥有指定权限
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return 是否拥有权限
     */
    boolean hasPermission(Long roleId, Long permissionId);

    /**
     * 批量设置角色权限（先清空再添加）
     *
     * @param roleId 角色ID
     * @param permissionIds 权限ID列表
     */
    void setRolePermissions(Long roleId, List<Long> permissionIds);

    /**
     * 获取拥有指定权限的角色ID列表
     *
     * @param permissionId 权限ID
     * @return 角色ID集合
     */
    Set<Long> getRoleIdsByPermissionId(Long permissionId);

    /**
     * 删除权限相关的所有角色关联
     *
     * @param permissionId 权限ID
     */
    void removePermissionFromAllRoles(Long permissionId);

    /**
     * 删除角色相关的所有权限关联
     *
     * @param roleId 角色ID
     */
    void removeRoleFromAllPermissions(Long roleId);
}